package config

import (
	"fmt"
	"os"
	"path/filepath"

	"gopkg.in/yaml.v3"
)

// ServerConfig 服务器配置
type ServerConfig struct {
	Port int    `yaml:"port"`
	Env  string `yaml:"env"`
}

// JWTConfig JWT配置
type JWTConfig struct {
	Secret string `yaml:"secret"`
}

// Config 总配置结构
type Config struct {
	Server     ServerConfig   `yaml:"server"`
	JWT        JWTConfig      `yaml:"jwt"`
	PacketSize uint32         `yaml:"packet_size"`
	Database   DatabaseConfig `yaml:"database"`
	MathGrpc   GrpcConfig     `yaml:"math_grpc"`
}

// GrpcConfig grpc配置
type GrpcConfig struct {
	Host string `yaml:"host"`
	Port int    `yaml:"port"`
}

// Database 数据库配置
type DatabaseConfig struct {
	Host     string `yaml:"host"`
	Port     int    `yaml:"port"`
	User     string `yaml:"user"`
	Password string `yaml:"password"`
	DbName   string `yaml:"dbname"`
	Charset  string `yaml:"charset"`
}

// GlobalConfig 全局配置实例
var GlobalConfig Config

// InitGlobalConfig 初始化全局配置
func InitGlobalConfig(configPath string) error {
	// 获取当前工作目录
	workDir, err := os.Getwd()
	if err != nil {
		return fmt.Errorf("获取工作目录失败: %v", err)
	}

	// 构建配置文件的完整路径
	fullPath := filepath.Join(workDir, configPath)

	// 读取配置文件
	data, err := os.ReadFile(fullPath)
	if err != nil {
		return fmt.Errorf("读取配置失败，请检查路径: %v", err)
	}

	// 解析YAML
	if err := yaml.Unmarshal(data, &GlobalConfig); err != nil {
		return fmt.Errorf("解析配置失败: %v", err)
	}

	return nil
}
